Skip to content

Conversation

@roomote
Copy link
Contributor

@roomote roomote bot commented Jan 30, 2026

Implements MKT-66 through MKT-74 for the blog section on roocode.com/blog.

Summary

Adds a complete blog section with:

  • Content layer with Markdown/frontmatter and Pacific Time scheduling
  • Blog index page and individual post pages with dynamic SSR
  • SEO metadata and Schema.org structured data
  • PostHog analytics events
  • Navigation and sitemap integration
  • Previous/next post navigation

Initial Posts (4 total)

  1. PRDs Are Becoming Artifacts of the Past (Jan 12)
  2. Code Review Got Faster, Not Easier (Jan 19)
  3. Vibe Coders Build and Rebuild, They Do Not Migrate (Jan 26)
  4. Async Agents Change the Speed vs Quality Calculus (Feb 2)

Implementation Details

Content Layer (MKT-67):

  • Markdown files in src/content/blog/ with Zod-validated frontmatter
  • Pacific Time scheduling evaluated at request-time (no deploy needed for time-gating)
  • gray-matter for parsing, react-markdown + remark-gfm for rendering

Blog Pages (MKT-68, MKT-69):

  • Index page at /blog with dynamic SSR (force-dynamic, runtime: nodejs)
  • Post page at /blog/[slug] with dynamic SSR
  • Breadcrumb navigation and prev/next post navigation

SEO (MKT-70):

  • Full OpenGraph and Twitter card metadata
  • Schema.org JSON-LD (Article, BreadcrumbList, CollectionPage)
  • Canonical URLs pointing to roocode.com/blog

Analytics (MKT-74):

  • PostHog blog_post_viewed and blog_index_viewed events
  • Referrer tracking for attribution

Navigation (MKT-72):

  • Updated nav-bar and footer to link to internal /blog
  • Blog link in Resources dropdown

Sitemap (MKT-71):

  • Dynamic blog paths with PT scheduling check

Testing

  • TypeScript compiles with no errors
  • Lint passes with no warnings
  • Frontmatter validation catches invalid formats

Files Changed

  • 21 files changed
  • New: docs/blog.md, blog pages, blog components, blog content
  • Modified: nav-bar.tsx, footer.tsx, constants.ts, sitemap config

Important

Adds a dynamic blog section with initial posts, SEO, analytics, and navigation integration to the website.

  • Blog Section:
    • Adds blog section with dynamic SSR for /blog and /blog/[slug] pages in page.tsx and [slug]/page.tsx.
    • Integrates SEO metadata, Schema.org structured data, and PostHog analytics.
    • Implements previous/next post navigation.
  • Content Management:
    • Uses Markdown files in src/content/blog/ with Zod-validated frontmatter.
    • Supports Pacific Time scheduling for post visibility.
  • Navigation and Sitemap:
    • Updates nav-bar.tsx and footer.tsx to include blog links.
    • Configures dynamic sitemap paths in next-sitemap.config.cjs.
  • Initial Posts:
    • Adds 4 initial blog posts with specific publish dates and times.
  • Testing and Validation:
    • Ensures TypeScript and linting pass without errors.
    • Validates frontmatter schema to catch invalid formats.

This description was created by Ellipsis for 85736c8. You can customize this summary. It will automatically update as commits are pushed.

Implements MKT-66 through MKT-74:

Content Layer (MKT-67):
- Markdown files in src/content/blog with Zod-validated frontmatter
- Pacific Time scheduling evaluated at request-time (no deploy needed)
- gray-matter for parsing, react-markdown + remark-gfm for rendering

Blog Pages (MKT-68, MKT-69):
- Index page at /blog with dynamic SSR
- Post page at /blog/[slug] with dynamic SSR
- Breadcrumb navigation and prev/next post navigation

SEO (MKT-70):
- Full OpenGraph and Twitter card metadata
- Schema.org JSON-LD (Article, BreadcrumbList, CollectionPage)
- Canonical URLs pointing to roocode.com/blog

Analytics (MKT-74):
- PostHog blog_post_viewed and blog_index_viewed events
- Referrer tracking for attribution

Navigation (MKT-72):
- Updated nav-bar and footer to link to internal /blog
- Blog link in Resources dropdown

Sitemap (MKT-71):
- Dynamic blog paths with PT scheduling check

Initial Posts:
- PRDs Are Becoming Artifacts of the Past (Jan 12)
- Code Review Got Faster, Not Easier (Jan 19)
- Vibe Coders Build and Rebuild (Jan 26)
- Async Agents Change the Speed vs Quality Calculus (Feb 2)
@roomote
Copy link
Contributor Author

roomote bot commented Jan 30, 2026

Rooviewer Clock   See task on Roo Cloud

No issues found. The latest commit was a CI retry with no code changes.

  • source field missing from Zod validation schema - the field will be silently stripped during parsing
Previous reviews

Mention @roomote in a comment to request specific changes to this pull request or fix all unresolved issues.

@mp-roocode mp-roocode self-assigned this Jan 30, 2026
@github-actions
Copy link
Contributor

github-actions bot commented Jan 30, 2026

🚀 Preview deployed!

Your changes have been deployed to Vercel:

Preview URL: https://roo-code-website-3lbno5tr4-roo-code.vercel.app

This preview will be updated automatically when you push new commits to this PR.

@mp-roocode
Copy link
Collaborator

@roomote fix the failing test

@roomote
Copy link
Contributor Author

roomote bot commented Jan 30, 2026

Fixaroo Clock   See task on Roo Cloud

Fixed the failing test. The HistoryPreview component was refactored to use useGroupedTasks and TaskGroupItem, but the test was still mocking the old TaskItem component. Updated the test to properly mock the new dependencies. All local checks passed.

View commit | Revert commit

roomote and others added 2 commits January 30, 2026 22:31
The HistoryPreview component was refactored to use useGroupedTasks and
TaskGroupItem instead of rendering TaskItem directly. This updates the
test file to properly mock the new dependencies:
- Mock useGroupedTasks hook to provide grouped task data
- Mock TaskGroupItem instead of TaskItem
- Update assertions to test for task groups instead of individual tasks
- Add reading time display to blog posts
- Create BlogPostCTA component with 4 variants (default, extension, cloud, enterprise)
- Add zebra striping to tables in blog posts
- Add CTA to blog landing and paginated pages
- Remove 'Posted' prefix from dates
- Update blog description: 'How teams use agents to iterate, review, and ship PRs with proof'
- Add BlogPostList and BlogPagination components
- Add 100+ new blog posts from content pipeline
@ellipsis-dev
Copy link
Contributor

ellipsis-dev bot commented Feb 2, 2026

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

…r Hours, Roo Cast)

- Add BlogSource type to types.ts
- Export BlogSource from blog index
- Add SourceBadge component to BlogPostList with colored badges
- Each podcast has distinct color: blue (Office Hours), purple (After Hours), emerald (Roo Cast)
@ellipsis-dev
Copy link
Contributor

ellipsis-dev bot commented Feb 2, 2026

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

…s, After Hours)

- Add add-blog-sources.ts script to build title→source mapping
- Updated 122 blog posts with correct podcast sources
- Sources: Roo Cast (52), Office Hours (62), After Hours (8)
@ellipsis-dev
Copy link
Contributor

ellipsis-dev bot commented Feb 2, 2026

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

- Add source field to Zod validation schema
- Source badges use same styling as tag badges (rounded, greyscale)
- Badges display on /blog landing page for Office Hours, After Hours, Roo Cast
@ellipsis-dev
Copy link
Contributor

ellipsis-dev bot commented Feb 2, 2026

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

- Change @type from Article to BlogPosting (more specific)
- Add image property using OG image URL
- Add wordCount for AEO optimization
@ellipsis-dev
Copy link
Contributor

ellipsis-dev bot commented Feb 2, 2026

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

@ellipsis-dev
Copy link
Contributor

ellipsis-dev bot commented Feb 2, 2026

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

@roomote
Copy link
Contributor Author

roomote bot commented Feb 2, 2026

Fixaroo Clock   See task on Roo Cloud

This issue was already resolved in a previous commit.

View fix commit - The source field was added to BlogFrontmatterSchema in commit 8bfc6b9 ("feat(blog): add source badges with consistent styling")

…ovin' to 'Tovan'

- Changed 22 instances of 'Series A team' to 'Series A - C team' across 20 blog posts
- Changed 12 instances of 'Tovin' to 'Tovan' across 4 blog posts

This broadens the messaging to better represent teams that Roo Code serves (Series A through C).
@ellipsis-dev
Copy link
Contributor

ellipsis-dev bot commented Feb 2, 2026

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

@mp-roocode
Copy link
Collaborator

@roomote look into the failing tests and fix them

@roomote
Copy link
Contributor Author

roomote bot commented Feb 3, 2026

Fixaroo Clock   See task on Roo Cloud

Investigated the CI failures. All tests pass locally:

  • src: 368 test files, 5314 tests passed
  • webview-ui: 118 test files, 1239 tests passed
  • web-roo-code: 1 test file, 27 tests passed

The CI failure was due to a timeout (The operation was canceled) after all tests had completed successfully, not actual test failures. Pushed an empty commit to trigger a fresh CI run.

View commit | Revert commit

@mp-roocode mp-roocode changed the title feat(web): add blog section with 4 initial posts feat(web): add blog section with initial posts Feb 3, 2026
@mp-roocode mp-roocode marked this pull request as ready for review February 3, 2026 00:33
@mp-roocode mp-roocode requested review from cte, jr and mrubens as code owners February 3, 2026 00:34
@dosubot dosubot bot added size:XXL This PR changes 1000+ lines, ignoring generated files. Enhancement New feature or request labels Feb 3, 2026
@ellipsis-dev
Copy link
Contributor

ellipsis-dev bot commented Feb 3, 2026

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

@roomote
Copy link
Contributor Author

roomote bot commented Feb 3, 2026

Rooviewer Clock   See task on Roo Cloud

No issues found. The latest commit was a CI retry with no code changes.

  • source field missing from Zod validation schema - the field will be silently stripped during parsing
Previous reviews

Mention @roomote in a comment to request specific changes to this pull request or fix all unresolved issues.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Enhancement New feature or request size:XXL This PR changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants